
package org.odmg;

/**
* The factory interface for a particular ODMG implementation.
* Each ODMG implementation will have a class that implements this interface.
* @author	David Jordan (as Java Editor of the Object Data Management Group)
* @version ODMG 3.0
*/

public interface Implementation {
/**
* Create a <code>Transaction</code> object and associate it with the current thread.
* @return The newly created <code>Transaction</code> instance.
* @see org.odmg.Transaction
*/
	public		Transaction		newTransaction();

/**
* Get the current <code>Transaction</code> for the thread.
* @return The current <code>Transaction</code> object or null if there is none.
* @see org.odmg.Transaction
*/
	public		Transaction		currentTransaction();

/**
* Create a new <code>Database</code> object.
* @return The new <code>Database</code> object.
* @see org.odmg.Database
*/
	public		Database			newDatabase();

/**
* Create a new <code>OQLQuery</code> object.
* @return The new <code>OQLQuery</code> object.
* @see org.odmg.OQLQuery
*/
	public		OQLQuery			newOQLQuery();

/**
* Create a new <code>DList</code> object.
* @return The new <code>DList</code> object.
* @see org.odmg.DList
*/
	public		DList					newDList();

/**
* Create a new <code>DBag</code> object.
* @return The new <code>DBag</code> object.
* @see org.odmg.DBag
*/
	public		DBag					newDBag();

/**
* Create a new <code>DSet</code> object.
* @return The new <code>DSet</code> object.
* @see org.odmg.DSet
*/
	public		DSet					newDSet();

/**
* Create a new <code>DArray</code> object.
* @return The new <code>DArray</code> object.
* @see org.odmg.DArray
*/
	public		DArray				newDArray();

/**
* Create a new <code>DMap</code> object.
* @return	The new <code>DMap</code> object.
* @see org.odmg.DMap
*/
	public		DMap					newDMap();

/**
* Get a <code>String</code> representation of the object's identifier.
* @param obj The object whose identifier is being accessed.
* @return The object's identifier in the form of a String
*/
	public		String				getObjectId(Object obj);

/**
* Get the <code>Database</code> that contains the object <code>obj</code>.
* @param obj The object.
* @return The <code>Database</code> that contains the object.
*/
	public		Database			getDatabase(Object obj);
}

